package com.pxmeta.dynamic.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pxmeta.dynamic.entity.Dynamic;
import com.pxmeta.dynamic.entity.dto.*;
import com.pxmeta.dynamic.entity.vo.DynamicDraftVO;

import java.util.List;

/**
 * 社区内容Service接口
 *
 * @author wcl
 * @date 2022-03-21
 */
public interface IDynamicService extends IService<Dynamic>
{
    /**
     * 发布动态
     * @param userId
     * @param dto
     * @return
     */
    Long publish(Long userId, CreateDynamicDTO dto);


    /**
     * 根据圈子id获取动态列表
     * @param circleId
     * @return
     */
    List<DynamicDTO> getByCircleId(Long circleId,Long userId, Integer page, Integer size, Integer type, Double userLng, Double userLnt);

    /**
     * 查询用户动态
     * @param userId
     * @return
     */
    List<DynamicDTO> getByUserId(Long userId,Integer page, Integer size);


    /**
     * 搜索动态
     * @param currentUserId
     * @param circleId
     * @param keyword
     * @param page
     * @param size
     * @return
     */
    List<DynamicDTO> search(Long currentUserId, Long circleId, String keyword, Integer page, Integer size);

    /**
     * 获取上次草稿
     * @param userId
     * @return
     */
    DynamicDraftVO getDynamicDraft(Long userId);

    /**
     * 对动态不感兴趣
     * @param dto
     * @param userId
     */
    void dislike(DynamicDislikeDTO dto, Long userId);

    /**
     * 修改权限
     * @param dto
     * @param userId
     */
    void updatePermission(UpdatePermissionDTO dto, Long userId);


    /**
     * 根据id获取动态
     * @param id
     * @return
     */
    DynamicDTO getDynamicById(Long currentUserId,Long id);


    /**
     * 根据话题id获取动态
     * @param topicId
     * @param userId
     * @param page
     * @param size
     * @return
     */
    List<DynamicDTO> getByTopicId(Long topicId, Long userId, Integer page, Integer size,Integer type);


    /**
     * 获取所有违规动态
     * @return
     */
    List<Dynamic> getBlockedList();

    /**
     * 获取圈子里的热门动态
     * @param circleId
     * @return
     */
    Long getHotDynamicId(Long circleId);


    /**
     * 获取动态列表
     * @param page
     * @param size
     * @param status
     * @return
     */
    IPage<DynamicDTO> getList(Integer page, Integer size, Integer status);

    /**
     * 删除动态
     * @param id
     */
    void deleteDynamic(Long id);

    /**
     * 彻底删除动态（物理删除）
     * @param id
     */
    void realDeleteDynamic(Long id);
}
